#include	"Vector4i.h"
#include	<cmath>

Vector4i::Vector4i()
{
}

Vector4i::~Vector4i()
{
}

Vector4i::Vector4i(int x, int y, int z, int w)
{
	Set(x, y, z, w);
}

Vector4i::Vector4i(const Vector4i & vec)
{
	Set(vec);
}

Vector4i::Vector4i(const int * arr)
{
	Set(arr);
}

void Vector4i::Set(int x, int y, int z, int w)
{
	m_data[0] = x;
	m_data[1] = y;
	m_data[2] = z;
	m_data[3] = w;
}

void Vector4i::Set(const int * arr)
{
	m_data[0] = arr[0];
	m_data[1] = arr[1];
	m_data[2] = arr[2];
	m_data[3] = arr[3];
}

Vector4i::operator const int*() const
{
	return m_data;
}

Vector4i::operator int*()
{
	return m_data;
}

const Vector4i & Vector4i::operator+() const
{
	return *this;
}

Vector4i & Vector4i::operator+()
{
	return *this;
}

Vector4i Vector4i::operator-() const
{
	return Vector4i(-m_data[0], -m_data[1], -m_data[2], -m_data[3]);
}

Vector4i & Vector4i::operator=(const Vector4i & vec)
{
	Set(vec);
	return *this;
}

Vector4i & Vector4i::operator+=(const Vector4i & vec)
{
	Set(m_data[0] + vec[0], m_data[1] + vec[1], m_data[2] + vec[2], m_data[3] + vec[3]);
	return *this;
}

Vector4i & Vector4i::operator-=(const Vector4i & vec)
{
	Set(m_data[0] - vec[0], m_data[1] - vec[1], m_data[2] - vec[2], m_data[3] - vec[3]);
	return *this;
}

Vector4i & Vector4i::operator*=(int num)
{
	Set(m_data[0] * num, m_data[1] * num, m_data[2] * num, m_data[3] * num);
	return *this;
}

Vector4i & Vector4i::operator/=(int num)
{
	Set(m_data[0] / num, m_data[1] / num, m_data[2] / num, m_data[3] / num);
	return *this;
}

Vector4i Vector4i::operator+(const Vector4i & vec) const
{
	return Vector4i(m_data[0] + vec[0], m_data[1] + vec[1], m_data[2] + vec[2], m_data[3] + vec[3]);
}

Vector4i Vector4i::operator-(const Vector4i & vec) const
{
	return Vector4i(m_data[0] - vec[0], m_data[1] - vec[1], m_data[2] - vec[2], m_data[3] - vec[3]);
}

Vector4i Vector4i::operator*(int num) const
{
	return Vector4i(m_data[0] * num, m_data[1] * num, m_data[2] * num, m_data[3] * num);
}

Vector4i Vector4i::operator/(int num) const
{
	return Vector4i(m_data[0] / num, m_data[1] / num, m_data[2] / num, m_data[3] / num);
}

Vector4i operator*(int num, const Vector4i & vec)
{
	return Vector4i(vec[0] * num, vec[1] * num, vec[2] * num, vec[3] * num);
}

bool Vector4i::operator==(const Vector4i & vec) const
{
	return (m_data[0] == vec[0]) && (m_data[1] == vec[1]) && (m_data[2] == vec[2]) && (m_data[3] == vec[3]);
}

bool Vector4i::operator!=(const Vector4i & vec) const
{
	return (m_data[0] != vec[0]) || (m_data[1] != vec[1]) || (m_data[2] != vec[2]) || (m_data[3] != vec[3]);
}

double Vector4i::LengthSquare() const
{
	return double(m_data[0] * m_data[0]) + double(m_data[1] * m_data[1]) + double(m_data[2] * m_data[2]) + double(m_data[3] * m_data[3]);
}

double Vector4i::Length() const
{
	return std::sqrt(double(m_data[0] * m_data[0]) + double(m_data[1] * m_data[1]) + double(m_data[2] * m_data[2]) + double(m_data[3] * m_data[3]));
}

